home *** CD-ROM | disk | FTP | other *** search
/ Hardcore Visual Basic 5.0 (2nd Edition) / Hardcore Visual Basic 5.0 - Second Edition (1997)(Microsoft Press).iso / Code / VE18B1~1.CLS < prev    next >
Text File  |  1997-06-14  |  2KB  |  90 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "CVectorWalker"
  6. Attribute VB_GlobalNameSpace = False
  7. Attribute VB_Creatable = True
  8. Attribute VB_PredeclaredId = False
  9. Attribute VB_Exposed = False
  10. Option Explicit
  11.  
  12. ' Implement Basic-friendly version of IEnumVARIANT
  13. Implements IVariantWalker
  14. ' Delegate to class that implements real IEnumVARIANT
  15. Private vars As CEnumVariant
  16. ' Connect back to parent collection
  17. Private connect As CVector
  18.  
  19. Public Enum EErrorVectorWalker
  20.     eeBaseVectorWalker = 13400  ' CVectorWalker
  21. End Enum
  22.  
  23. ' Private state data
  24. Private iCur As Long
  25.  
  26. Private Sub Class_Initialize()
  27.     ' Initialize position in collection
  28.     iCur = 0
  29.     ' Connect walker to CEnumVariant so it can call methods
  30.     Set vars = New CEnumVariant
  31.     vars.Attach Me
  32. End Sub
  33.  
  34. ' Receive connection from CVector
  35. Sub Attach(connectA As CVector)
  36.     Set connect = connectA
  37. End Sub
  38.  
  39. ' Return IEnumVARIANT (indirectly) to client collection
  40. Function NewEnum() As stdole.IEnumVARIANT
  41.     Set NewEnum = vars
  42. End Function
  43.  
  44. ' Implement IVariantWalker methods
  45. Private Function IVariantWalker_More(v As Variant) As Boolean
  46.     ' Move to next element
  47.     iCur = iCur + 1
  48.     ' Return False if no more data
  49.     If iCur > connect.Last Then Exit Function
  50.     ' Return element through reference
  51.     If IsObject(connect.Vector(iCur)) Then
  52.         Set v = connect.Vector(iCur)
  53.     Else
  54.         v = connect.Vector(iCur)
  55.     End If
  56.     IVariantWalker_More = True
  57. End Function
  58.  
  59. Private Sub IVariantWalker_Reset()
  60.     ' Move to first element
  61.     iCur = 0
  62. End Sub
  63.  
  64. Private Sub IVariantWalker_Skip(c As Long)
  65.     ' Skip a given number of elements
  66.     iCur = iCur + c
  67. End Sub
  68. '
  69.  
  70. #If fComponent = 0 Then
  71. Private Sub ErrRaise(e As Long)
  72.     Dim sText As String, sSource As String
  73.     If e > 1000 Then
  74.         sSource = App.ExeName & ".VectorWalker"
  75.         Select Case e
  76.         Case eeBaseVectorWalker
  77.             BugAssert True
  78.        ' Case ee...
  79.        '     Add additional errors
  80.         End Select
  81.         Err.Raise COMError(e), sSource, sText
  82.     Else
  83.         ' Raise standard Visual Basic error
  84.         sSource = App.ExeName & ".VBError"
  85.         Err.Raise e, sSource
  86.     End If
  87. End Sub
  88. #End If
  89.  
  90.